import { lazyReportBatch } from "../report";
import { generateUniqueId } from "../utils";

/**
 * 页面路由变化监控函数
 *
 * 功能说明：
 * - 监听 hashchange 和 popstate 两种路由变化事件
 * - 收集路由变更信息并通过懒上报机制批量报告
 * - 记录路由变化的起始时间并生成唯一事件ID
 *
 * 事件类型说明：
 * - hashchange: 监控 hash 路由变化（#锚点变化）
 * - popstate: 监控 history API 路由变化
 *
 * 上报数据结构：
 * {
 *   type: 'behavior',        // 固定为行为类型
 *   subType: 'hashchange',   // 子类型区分路由类型
 *   from: 'oldUrl',          // 变更前URL
 *   to: 'newUrl',            // 变更后URL
 *   startTime: 时间戳,       // 事件发生时间
 *   uuid: '唯一标识'         // 事件唯一标识
 * }
 */
export default function pageChange() {
  // 哈希路由监控实现
  let oldUrlHash = "";
  window.addEventListener(
    "hashchange",
    (event) => {
      const newUrl = event.newURL;
      // 构造哈希路由变更上报数据
      const reportData = {
        type: "behavior",
        subType: "hashchange",
        from: oldUrlHash,
        to: newUrl,
        startTime: performance.now(), // 使用高精度时间戳
        uuid: generateUniqueId(), // 生成唯一事件ID
      };
      lazyReportBatch(reportData); // 延迟批量上报
      oldUrlHash = newUrl; // 更新旧URL记录
    },
    true
  );

  // history路由监控实现
  let oldUrlHistory = "";
  window.addEventListener(
    "popstate",
    (event) => {
      const newUrl = event.newURL;
      // 构造history路由变更上报数据
      const reportData = {
        type: "behavior",
        subType: "popstate",
        from: oldUrlHistory,
        to: newUrl,
        startTime: performance.now(),
        uuid: generateUniqueId(),
      };
      lazyReportBatch(reportData);
      oldUrlHistory = newUrl;
    },
    true
  );
}
